package com.hliushi.learn.job;

import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;
import com.hliushi.learn.model.FileCustom;
import com.hliushi.learn.service.TFileService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * 文件备份任务
 * 次任务在每次执行时获取一定数目的文件, 进行备份处理
 * 由File实体类的backedUp属性来标识该文件是否已经备份
 *
 * @author llhuang10
 * @date 2021/8/16 21:56
 */
@Slf4j
@Component
public class FileBackupJobBean implements SimpleJob {

    /**
     * 每次任务执行要备份文件的数量
     */
    private static final int FETCH_SIZE = 2;

    @Resource
    private TFileService tFileService;


    /**
     * 任务执行代码逻辑
     *
     * @param shardingContext 分片上下文
     */
    @Override
    public void execute(ShardingContext shardingContext) {
        //1.获取未备份文件
        List<FileCustom> unBackupFiles = tFileService.fetchUnBackupFiles(shardingContext.getShardingParameter(), FETCH_SIZE);

        // 作业分片信息
        //  shardingItem -> 分配于本作业实例的分片项
        int shardingItem = shardingContext.getShardingItem();
        // 分片参数, 0=text,1=image,2=radio,3=vedio, 参数是(text, image, radio, vedio)
        String shardingParameter = shardingContext.getShardingParameter();

        log.info("Time: {} | 线程 {} | 作业分片：{} | 分片参数 {} | 已获取文件数据 {} 条",
                new SimpleDateFormat("HH:mm:ss").format(new Date()),
                Thread.currentThread().getId(),
                shardingItem,
                shardingParameter,
                unBackupFiles.size()
        );

        // 2.执行文件备份操作
        tFileService.backupFiles(unBackupFiles);
    }


}
